Passed
Push — master ( 6c3531...39adec )
by Plamen
01:26
created

table_helper.GetParent   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 4
nc 2
nop 2
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
var table_helper = {
2
    Init: function(tableId){
3
        var tContainer = document.getElementById(tableId);
4
        if(!this.IePrior(9)){
5
            SetColumnsHoverEffect(tContainer, tableId);
6
        }
7
        var tfoot = tContainer.getElementsByTagName("tfoot")[0];
8
        this.ProcessPaginationLinks(tfoot);
9
        
10
        function SetColumnsHoverEffect(tContainer, tableId){
11
            var tHcells = tContainer.rows[0].cells;
12
            for(var i = 0; i < tHcells.length; i++){
13
                if(tHcells[i].firstChild.tagName === "A"){
14
                    tHcells[i].firstChild.setAttribute("onmouseover",
15
                            "table.ColumnHover('" + tableId + "'," + i + ");");
16
                    tHcells[i].firstChild.setAttribute("onmouseout",
17
                            "table.ColumnHover('" + tableId + "');");
18
                }
19
            }
20
        }
21
    },
22
    ColumnHover: function(tableContainer, index){
23
        var rows = document.getElementById(tableContainer).rows;
24
        var upto = rows.length - 1;
25
        if(typeof index === "undefined"){
26
            ColumnHoverRelease(rows, upto);
27
        }else{
28
            for(var i = 0; i < upto; i++){
29
                rows[i].cells[index].setAttribute("lang", "col-hover");
30
            }
31
        }
32
        function ColumnHoverRelease(rows, upto){
33
            for(var i = 0; i < upto; i++){
34
                for(var j = 0; j < rows[i].cells.length; j++){
35
                    if(rows[i].cells[j].lang){
36
                        rows[i].cells[j].removeAttribute("lang");
37
                    }
38
                }
39
            }
40
        };
41
    },
42
    BuildRequest: {
43
        Run: function(tableId){
44
            var rq = {tableId: tableId, strDesc: this.strDesc, strAsc: this.strAsc};
45
            var parent = this.helper.BuildRequest;
46
            parent.sort(rq);
47
            parent.filter(rq);
48
            return rq;
49
        },
50
        sort: function(rq){
51
            var thTags = document.getElementById(rq.tableId)
52
                        .getElementsByTagName("thead")[0]
53
                        .getElementsByTagName("th");
54
            var length = thTags.length;
55
            for(var i = 0; i < length; i++){
56
                var link = thTags[i].getElementsByTagName("a")[0];
57
                if(link){
58
                    var span = link.getElementsByTagName("span")[0];
59
                    if(span && sortBySpan(span, i)){
60
                        break;
61
                    }
62
                }
63
            }
64
65
            function sortBySpan(span, i){
66
                var order = span.innerHTML;
67
                if(order.length === 1){
68
                    rq.colNo = i;
69
                    rq.colOrd = order === rq.strDesc ? "desc" : "asc";
70
                }
71
                return rq.colNo === i;
72
            }
73
        },
74
        filter: function(rq){
75
            var r = getFilterFieldsByTableID(rq.tableId);
76
            if(r.filter !== null){
77
                rq.filter = r.filter;
78
            }
79
            if(r.filterBy !== null){
80
                rq.filterBy = r.filterBy;
81
            }
82
83
            function getFilterFieldsByTableID(tableID){
84
                var fields = {filterBy: null, filter: null};
85
                var filterDiv = getFilterDivByTableIDOrNull(tableID);
86
                if(filterDiv !== null){
87
                    setFilterBy(fields, filterDiv);
88
                    setFilterValue(fields, filterDiv);
89
                }
90
                return fields;
91
92
                function getFilterDivByTableIDOrNull(tableID){
93
                    if(document.getElementById(tableID).parentNode
94
                            .getElementsByTagName("div").length > 0
95
                            ){
96
                        var containerDivs = document.getElementById(tableID)
97
                                .parentNode.getElementsByTagName("div");
98
                        for(var i = 0; i < containerDivs.length; i++){
99
                            if(containerDivs[i].getAttribute("class") === "filter"){
100
                                return containerDivs[i];
101
                            }
102
                        }
103
104
                    }
105
                    return null;
106
                }
107
108
                function setFilterBy(fields, filterDiv){
109
                    var select = filterDiv.getElementsByTagName("select")[0];
110
                    if(select &&
111
                            select.options[select.selectedIndex].value !== "all"
112
                            ){
113
                        fields.filterBy = select.options[select.selectedIndex].value;
114
                    }
115
                }
116
                function setFilterValue(fields, filterDiv){
117
                    var textObj = filterDiv.getElementsByTagName("input")[0];
118
                    if(textObj && textObj.value && textObj.value.length !== 0){
119
                        fields.filter = encodeURIComponent(textObj.value.trim());
120
                    }
121
                }
122
            }
123
        }
124
    },
125
    IePrior: function(v){
126
        var rv = false;
127
        if(window.navigator.appName === 'Microsoft Internet Explorer'){
128
            var ua = window.navigator.userAgent;
129
            var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
130
            if(re.exec(ua) !== null){
131
                rv = parseFloat(RegExp.$1);
132
            }
133
            rv = rv < v ? true : false;
134
        }
135
        return rv;
136
    },
137
    GetParent: function(obj, objType){
138
        while(obj && obj.tagName !== objType.toUpperCase()){
139
            obj = obj.parentNode;
140
        }
141
        return obj;
142
    },
143
    ProcessPaginationLinks: function(tfoot){
144
        var pLinks = tfoot.querySelectorAll(".paging a");
145
        if(pLinks.length > 0){
146
            for(var j = 0; j < pLinks.length; j++){
147
                pLinks[j].setAttribute("href", "javascript:void(0);");
148
                pLinks[j].setAttribute("onclick", "return table.GoPage(this);");
149
            }
150
        }
151
    },
152
    RequestToUrl: function(rq){
153
        var url = location.pathname + ".json" + location.search;
154
        var getUrlVarName = {
155
            colNo: "col", colOrd: "ord", filter: "filter",
156
            filterBy: "filter-by", pageNo: "pg", exportType: "export",
157
            tableId: "table-id"
158
        };
159
        var flagFirst = location.search.length < 1 ? true : false;
160
        //lets remove rq.strAsc and rq.srtDesc
161
        //var request = Object.assign({}, rq); //EC6+
162
        var request = JSON.parse(JSON.stringify(rq)); //EC5
163
        delete(request.strAsc); delete(request.strDesc);
164
        for(var r in request){
1 ignored issue
show
Complexity introduced by
A for in loop automatically includes the property of any prototype object, consider checking the key using hasOwnProperty.

When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically:

var someObject;
for (var key in someObject) {
    if ( ! someObject.hasOwnProperty(key)) {
        continue; // Skip keys from the prototype.
    }

    doSomethingWith(key);
}
Loading history...
165
            var clue = flagFirst === true ? "?" : "&";
166
            url += clue + getUrlVarName[r] + "=" + rq[r];
167
            flagFirst = false;
168
        }
169
        return url;
170
    }
171
};
172